/**
 * 安卓白金英雄坛制作组 <br>
 * 文件名：Skill.java <br>
 * 创建时间：2013-7-24 上午9:45:13 <br>
 * 所属项目：GmudEX <br>
 *
 * @author 12548 <br>
 */
package lostland.gmud.exv2.data;

import lostland.gmud.exv2.Gmud;

/**
 * 类名：Skill <br>
 * 说明：技能
 *
 * @author 12548
 */
public class Skill {

	/**
	 * 通过技能位置得到对应的基本技能
	 *
	 * @since 输入：技能位置；输出：基本XX的ID<br>
	 * 如招架为4，基本招架为4+a[4]=8
	 */
	public static final int kind_basic_skills[] = new int[]{
			1, 1, 7, 0, 8, 67
	};

	/**
	 * 通过武器子类型得到对应的武器技能
	 *
	 * @since 输入：武器子类型；输出：对应的武器技能<br>
	 * 如剑为6，基本剑法为a[6]=2
	 */
	public static final int eqpbias2[] = new int[]{
			0, 3, 0, 0, 0, 0, 2, 5, 4, 6, 0, 1
	};

	/**
	 * 通过技能类型得到技能位置
	 *
	 * @since 输入：技能类型；输出：技能位置
	 */
	public static final int equip_pos[] = new int[]{
			3, 0, 1, 1, 1, 1, 1, 2, 4, 5
	};

	public static final int KIND_QUANJIAO = 1;
	public static final int KIND_BINGREN = 2;
	public static final int KIND_ZHAOJIA = 8;
	public static final int KIND_QINGGONG = 7;
	public static final int KIND_ZHISHI = 9;
	public static final int KIND_NEIGONG = 0;

	public static final int KIND_DAOFA = 1;
	public static final int KIND_JIANFA = 0;
	public static final int KIND_BIANFA = 4;
	public static final int KIND_ZHANGFA = 3;
	public static final int KIND_GUNFA = 2;

	public int id;                       // ID
	public int kind;                   // 类型
	public int subkind = 0;          // 子类型
	public String name;             // 名称
	public boolean checkable;  // 可勾选
	public boolean npc_skill = false;  // 是否为NPC专用技能

	public int zss;                    // 招式编号起始
	public int zse;                    // 招式编号结束

	/**
	 * 技能位置（0拳脚 1兵刃 2轻功 3内功 4招架）
	 */
	public int pos;

//	public static int WRENCH_INDEX = 45;

	public String des = "这门武功不知道是干什么";


// /**
// * 是否为基本技能
// * @param 当类型id+子类型id=技能id时，为基本技能<br>
// * 原理为基本技能都是10以下的，而子类型都是0，类型和技能的id相等
// */
// public boolean isBasic()
// {
// return kind + subkind == id;
// }

	/**
	 * @return skillCount
	 */
	public static int getSkillCount() {
		return Gmud.skill.length;
	}

	/**
	 * 获取技能对应的基本技能
	 */
	public Skill getBasicSkill() {
		return Gmud.skill[getBasicSkill(id)];
	}

	/**
	 * 获取指定技能对应的基本技能
	 *
	 * @param index 技能id
	 */
	public static int getBasicSkill(int index) {
		switch (Gmud.skill[index].pos) {
			case 0:
				return 1;
			case 1:
				switch (Gmud.skill[index].subkind) {
					case 0:
						return 2;
					case 1:
						return 3;
					case 2:
						return 4;
					case 3:
						return 5;
					case 4:
						return 6;
					case 11:
						return 1;
				}
				break;
			case 2:
				return 7;
			case 3:
				return 0;
			case 4:
				return 8;
			case 5:
				return 67;
		}
		return 9;
	}

	/**
	 * 武器是否匹配武器技能
	 *
	 * @param skill_kind 技能类型
	 * @param item_kind  武器类型
	 */
	public static boolean isSameSubkind(int skill_kind, int item_kind) {
		int hash[] = new int[]{6, 1, 8, 7, 9}; // 0剑 1刀 3杖 4鞭
		return hash[skill_kind] == item_kind;
	}

	public Skill() {
	}


	/**
	 * @param 轻功专用 纯随机
	 */
	public Gesture chooseAGesture() {
		Skill t = this;

		int i = t.zse;
		int s = i - t.zss + 1;

		int r = t.zss + Gmud.rand.nextInt(s);

		return Gmud.zs.get(r);
	}

	public int levelOf(Npc npc) {
		return npc.skills[id];
	}

	/**
	 * @param 招架专用
	 * @param zdp  攻击方
	 * @param bdp  招架方
	 * @param type =0:拳脚招架拳脚；=1:兵刃招架拳脚；=2:拳脚招架兵刃；=3:兵刃招架兵刃
	 * @param 附加效果 dmgfix(i5)负数攻击者受伤，正数招架者受伤
	 * @return Gesture
	 */
	public Gesture chooseAGesture(Npc zdp, Npc bdp) {
		Skill t = this;
		int type = (zdp.equips(true) && zdp.getAttackItem().getSubkind() != 11) ? 2 : 0;
		type = (bdp.equips(true) && bdp.getAttackItem().getSubkind() != 11) ? 1 + type : type;

		int i = t.zse;
		int s = i - t.zss + 1;
		Gesture ges = null;

		do {
			int r = t.zss + Gmud.rand.nextInt(s);
			ges = Gmud.zs.get(r);
		} while (ges.dmg_type != type);

		if (ges.dmgfix > 0) {
			bdp.dmg(ges.dmgfix, 0);
		} else if (ges.dmgfix < 0) {
			zdp.dmg(Math.abs(ges.dmgfix), 0);
		}

		return ges;
	}
}
